package com.szwistar.common.comm;

/**
 * 异步消息收发器
 * @author 张勇
 */
public interface AsyncTranceiver {
	/**
	 * 获取本接口所属的对象
	 */
	Object getOwner();

	/**
	 * 是否已准备就绪，可以收发数据了
	 */
	public boolean isReady();

	/**
	 * 发送指令，并准备好接收响应和超时重发
	 * @param message
	 * @param needFix 是否需要干预（即在连接未建立时是否需要自动尝试建立连接）
	 * @return
	 * @throws Exception
	 */
	public AsyncCmdAck sendMessage(AsyncCommand message, boolean needFix) throws Exception;

	/**
	 * 发送指令，并准备好接收响应和超时重发(默认不干预连接)
	 * @param message
	 * @return
	 * @throws Exception
	 */
	public AsyncCmdAck sendMessage(AsyncCommand message) throws Exception;

	/**
	 * 直接发送指令，不做其它任何处理
	 * @param message
	 * @return 如果发送成功，则返回发送的命令；否则返回 null
	 * @throws Exception
	 */
	public AsyncCommand doSend(AsyncCommand message, boolean needFix);

	/**
	 * 处理收到的消息
	 * @param message
	 * @return 是否已经处理
	 */
	public boolean handleMessage(AsyncResponse message);
}
